package com.yumeko.producer;

import org.apache.rocketmq.client.apis.ClientConfiguration;
import org.apache.rocketmq.client.apis.ClientException;
import org.apache.rocketmq.client.apis.ClientServiceProvider;
import org.apache.rocketmq.client.apis.message.Message;
import org.apache.rocketmq.client.apis.producer.Producer;
import org.apache.rocketmq.client.apis.producer.SendReceipt;
import org.apache.rocketmq.shaded.org.slf4j.Logger;
import org.apache.rocketmq.shaded.org.slf4j.LoggerFactory;
//必须在服务端设置 sh bin/mqadmin updateTopic -n localhost:9876 -t DelayTopic -c DefaultCluster -a +message.type=DELAY
public class MyDelayProducer {
    private static final Logger logger = LoggerFactory.getLogger(MyDelayProducer.class);

    public static void main(String[] args) throws ClientException {
        final ClientServiceProvider provider = ClientServiceProvider.loadService();
        // 接入点地址，需要设置成Proxy的地址和端口列表，一般是xxx:8081;xxx:8081。
        String endpoint = "192.168.88.129:8081";
        ClientConfiguration configuration  = ClientConfiguration.newBuilder().setEndpoints(endpoint).build();
        // 消息发送的目标Topic名称，需要提前创建。
        String topic = "DealyTopic";
        // 初始化Producer时需要设置通信配置以及预绑定的Topic。
        Producer producer = provider.newProducerBuilder()
                .setTopics(topic)
                .setClientConfiguration(configuration)
                .build();
        //以下示例表示：延迟时间为3分钟之后的Unix时间戳。
        long deliverTimeStamp = System.currentTimeMillis() + 1L * 60 * 1000;
        // 定时延迟消息设置。
        Message message = provider.newMessageBuilder()
                .setTopic(topic)
                // 设置消息索引键，可根据关键字精确查找某条消息。
                .setKeys("messageKey")
                // 设置消息Tag，用于消费端根据指定Tag过滤消息。
                .setTag("messageTag")
                // 定时延时消息设置
                .setDeliveryTimestamp(deliverTimeStamp)
                // 消息体。
                .setBody("messageBody".getBytes())
                .build();
        try {
            // 发送消息，需要关注发送结果，并捕获失败等异常。
            SendReceipt sendReceipt = producer.send(message);
            System.out.println("Send delay message successfully, messageId:"+sendReceipt.getMessageId());
            logger.info("Send delay message successfully, messageId={}", sendReceipt.getMessageId());
        } catch (ClientException e) {
            logger.error("Failed to send message", e);
        }
        // producer.close();
    }
}
